import { mockUserProfile } from './mock.js';
import { eventBus } from '@/service/eventService'
import { UserProfileKeyALL, getUserProfileDefault } from '@/constants/userProfile'

/**
 * 获取用户配置项（纯前端版本，使用 sessionStorage）
 * @param {string} profileKey - 配置项键名
 * @returns {Promise<any>} 配置项值
 */
function getUserProfile(profileKey) {
    const res = sessionStorage.getItem(profileKey);
    if(res){
      return JSON.parse(res);
    }
    const defaultValue = getUserProfileDefault(profileKey);
    return defaultValue;
}

/**
 * 获取用户个人信息
 * @returns {Promise<Object>} 用户信息
 */
async function getUserInfo() {
    try {
        // 模拟异步请求延迟
        await delay(100);
        
        // 从配置文件或默认值获取用户信息
        const userProfile = mockUserProfile;
        
        return Promise.resolve(userProfile);
    } catch (error) {
        console.error('获取用户信息失败:', error);
        return Promise.reject(error);
    }
}

/**
 * 延迟函数，模拟异步请求
 * @param {number} ms - 延迟毫秒数
 * @returns {Promise}
 */
function delay(ms) {
    return new Promise(resolve => setTimeout(resolve, ms));
}

/**
 * 保存用户配置项（纯前端版本，使用 sessionStorage）
 * @param {string} profileKey - 配置项键名
 * @param {any} profileValue - 配置项值
 * @param {boolean} isBroadcast - 是否广播
 * @returns {Promise<any>} 保存结果
 */
function saveUserProfile(profileKey, profileValue = "", isBroadcast = true) {
    sessionStorage.setItem(profileKey, JSON.stringify(profileValue));
    if (isBroadcast) {
        eventBus.emit('changeUserProfileEvent', profileKey, profileValue);
    }
    return Promise.resolve(profileValue);
}

/**
 * 保存用户个人信息
 * @param {Object} userInfo - 用户信息对象
 * @returns {Promise<Object>} 保存结果
 */
async function saveUserInfo(userInfo) {
    try {
        // 模拟异步请求延迟
        await delay(100);
        // 在实际应用中，这里应该调用API保存用户信息
        // 这里仅模拟保存成功
        return Promise.resolve(userInfo);
    } catch (error) {
        return Promise.reject(error);
    }
}

// 导出服务实例和方法
export { getUserProfile, saveUserProfile, getUserInfo, saveUserInfo };




/**
 * 清除所有用户配置项（纯前端版本）
 */
function clearAllUserProfiles() {
    UserProfileKeyALL.forEach(item => {
        sessionStorage.removeItem(item.key);
    });
}


async function logout(options = {}) {
    // 清除登录状态标识
    localStorage.removeItem('loginStatus');
    
    // 清除所有用户配置
    clearAllUserProfiles();
    
    return Promise.resolve({ success: true, message: '注销成功' });
} 



export default {
  getUserProfile,
  saveUserProfile,
  clearAllUserProfiles,
  logout,
  getUserInfo,
  saveUserInfo
};
